package com.kika.obwiki.service;

import com.kika.obwiki.websocket.WebSocketServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 通知服务类
 * 处理各种通知消息的推送
 */
@Service
public class NotificationService {

  private static final Logger LOG = LoggerFactory.getLogger(NotificationService.class);

  @Autowired
  private WebSocketServer webSocketServer;

  /**
   * 发送点赞通知
   * 
   * @param articleTitle 文章标题
   * @param userName     点赞用户名称
   * @param targetUserId 目标用户ID（文章作者）
   */
  public void sendVoteNotification(String articleTitle, String userName, String targetUserId) {
    String message = String.format("用户 %s 点赞了您的文章《%s》", userName, articleTitle);

    // 发送给指定用户
    webSocketServer.sendMessageToUser(targetUserId, message);

    LOG.info("发送点赞通知：{} -> {}", targetUserId, message);
  }

  /**
   * 发送评论通知
   * 
   * @param articleTitle 文章标题
   * @param userName     评论用户名称
   * @param targetUserId 目标用户ID（文章作者）
   */
  public void sendCommentNotification(String articleTitle, String userName, String targetUserId) {
    String message = String.format("用户 %s 评论了您的文章《%s》", userName, articleTitle);

    // 发送给指定用户
    webSocketServer.sendMessageToUser(targetUserId, message);

    LOG.info("发送评论通知：{} -> {}", targetUserId, message);
  }

  /**
   * 发送系统通知
   * 
   * @param message      通知消息
   * @param targetUserId 目标用户ID
   */
  public void sendSystemNotification(String message, String targetUserId) {
    webSocketServer.sendMessageToUser(targetUserId, message);
    LOG.info("发送系统通知：{} -> {}", targetUserId, message);
  }

  /**
   * 发送全局通知
   * 
   * @param message 通知消息
   */
  public void sendGlobalNotification(String message) {
    webSocketServer.sendInfo(message);
    LOG.info("发送全局通知：{}", message);
  }

  /**
   * 检查用户是否在线
   * 
   * @param userId 用户ID
   * @return 是否在线
   */
  public boolean isUserOnline(String userId) {
    return WebSocketServer.isUserOnline(userId);
  }

  /**
   * 获取当前在线用户数
   * 
   * @return 在线用户数
   */
  public int getOnlineUserCount() {
    return WebSocketServer.getConnectionCount();
  }
}